The Only Principle That Matters: It.Depends.Always

When people talk about software engineering principles, they often jump straight into tools, processes, or buzzwords like “agile”, “zero tech debt.” or everyone’s favourite - “vibe-coding”. But for me, everything starts with the business context.

Every bug, every feature request, every architectural decision - all of it traces back to a customer, a product need, or a business goal.

Understanding software engineering begins by recognizing that a product goes through stages. And at each stage, the right engineering decisions are different. There’s no “one-size-fits-all” process, technology or stack.

Here’s how I view it:

Stage 1: Pre-Market Fit (Your Dad, Grandma, and Best Friend Are the Only Users)

At this point, you’re in market discovery mode. You don’t have a real customer base yet, you’re testing the waters, exploring your product’s place in the market and looking for a competitive edge.

Your job? Experiment fast. Ship fast. Learn fast. Fast.

At this stage - it is a race track, not a museum. You may rewrite the entire codebase 10 times, and that’s fine - it’s expected. What you need is:

At this stage, velocity > quality and the risk of tech debt is low, because nothing is set in stone yet.

Stage 2: Paying Customers and the Quality Shift

Congratulations - you have people paying for your product. That changes everything. Now, customer retention should be your top priority.

You’re no longer building fast, you’re building trust. Word of mouth is your best marketing tool, and bugs are now business risks.

What changes?

You’ll be tempted to keep rushing - especially when customers are asking for new features. But this is a trap. If you don’t invest in foundational improvements now, the compounding cost of shortcuts will haunt every future sprint. Bugs pile up, complexity grows, and each new feature starts taking twice as long to implement.

Stage 3: Scaling

You’ve got momentum. Customers are growing. So are your costs, infrastructure, and headcount.

At this stage:

Yes, you’re slower than in Stage 1. But now you should be focused on stability and optimization. You don’t want one flaky deployment to affect hundreds or thousands of users.

The Myth of the “One True Way”

People love to debate the “best practices” of software engineering - some preach zero tech debt from day one, others say ship fast and break things. Some swear by self-hosting, others go all-in on serverless. The truth?

It depends.

The “correct” answer changes depending on:

If someone tells you they’ve found the universal solution to software engineering, what they’ve really found is a limited perspective.

For example:

What matters is aligning your processes with your business needs, not mimicking what big corporations do. Their problems might not be your problems - yet.

The AI Factor

AI is changing the game - especially for startups. It’s easier than ever to generate code, spin up services, and move fast. AI-powered tooling can enable teams to ship thousands of lines of code a day.

And while AI can help you build faster, it won’t solve complexity for you.

If you don’t adjust your engineering discipline as you grow, AI will just help you dig a deeper hole - faster.

The companies that will thrive in the AI era are the ones that know when to move fast and when to slow down. When to build for speed, and when to build for stability.

Final Thoughts

Software engineering isn’t about “best practices.”.

It’s about appropriate practices - the right decisions, at the right time, for the right context.

So if I had to summarize my personal principle of software engineering in three words, it would be: It. Depends. Always.